iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0

學習原因:

已經有測試專案的基本架構,接下來會透過 CI / CD 工具 - Jenkins 把整個流程串接起來,使得提交程式碼以後,整個測試流程可以自動執行,並生成報告 和 發送通知。

學習目標:

  • 使用 Jenkins 串接整個測試流程

什麼是 CI/CD ?

https://ithelp.ithome.com.tw/upload/images/20230926/20162038NhtMlHMVH2.png

  • CI = Continuous Integration 持續整合

    是一個開發實踐,要求開發人員將他們的 Source Code 頻繁地合併到共享存儲庫中。每次合併後,系統會自動進行一系列測試,包括 Unit Test、Integration Test 等,以確保新 Source Code 的質量,有助於及早發現和解決問題。

  • CD = Continuous Delivery / Deployment 持續交付 / 佈署

    主要是指將經過測試的 Source code 進行部署

    持續部署: 每次通過測試的 Source Code 都會 自動部署

    持續交付:Source Code 通過測試後,等待人工觸發進行部署

優點:

  • 更快的交付速度:自動化的流程可以加速從 開發部署 過程。
  • 更高的質量:自動化測試確保了每次更改的質量和穩定性。
  • 減少錯誤:減少手動操作,減少人為錯誤的風險。
  • 更靈活的部署:可以更快地回應用戶需求和市場變化,可以頻繁推出新功能或各種修正。
  • 更好的協作:團隊成員可以更容易地協作和整合 Source Code。

Jenkins - CI / CD 工具

為實踐 CI/CD 的流程,有很多 CI/CD 的工具能夠自動化軟體開發的不同階段,包括 Build Code、測試、部署和監控,從而實現快速交付高質量的軟體。一些常見的 CI/CD 工具包括: Jenkins、Circle CI,GitLab CI、GitHub Actions 等。

這裡選擇使用 Jenkins 講解,Jenkins 是一個開源的自動化服務器,可以用於執行各種自動化任務,包括持續整合和持續部署。它具有豐富的插件生態系統,而且具備清晰易用的使用介面,比較適合初學者學習使用,它亦是目前大部分公司都在使用的工具。

安裝 Jenkins

根據你的 OS 系統到 官網 下載 Jenkins,內有安裝教學。

使用 Jenkins 需要安裝 Java,請參看 官方文件 對 Java 版本的需求,目前的話需要版本 11 / 17。

安裝完成以後,在瀏覽器使用網址 http://localhost:8080 即可開啟 Jenkins 的頁面。然後跟著流程設定,若對 Plugin 的沒有特別需求的話,選擇 Install Suggested Plugin 即可。

建立 Automation Test 的 Job

  1. 點選 Create a Job / New Item

https://ithelp.ithome.com.tw/upload/images/20230926/20162038BE3oPFGhaG.png

  1. 輸入 Job 的名字,選 Free Style Project

https://ithelp.ithome.com.tw/upload/images/20230926/20162038AB89Tea4tH.png

  1. Source Code Manager:

    我們的專案都會使用到 Git,所以 Jenkins 需要跟 Git 的 Source Code Manager 作串接。我這裡會用 Github 作示範,了解如何操作,其他的 Git Service (I.e. Gitlab, Bitbucket) 的做法也是相似。

    需要讓 Jenkins 串接,要有 Repository 的 URL取得資源的權限


    Step 1: Repository 的 URL 可以在 Github Repository 取得。

    點選 Code > Local Tab > HTTPS > Copy URL,再貼到 Jenkins 的 Repository URL

    https://ithelp.ithome.com.tw/upload/images/20230926/20162038OsUe7C44gd.png

    Step 2: 在 Github 建立 Personal Access Token,
    點選右上角的 Account Menu > Settings > Developer Settings > Personal Access Token > Tokens (Classic)
    https://ithelp.ithome.com.tw/upload/images/20230926/20162038KYilM0jqpZ.png

    Generate new token > Generate new token (classic)

    https://ithelp.ithome.com.tw/upload/images/20230926/20162038I5miUwWCUo.png

    輸入 Token 的名稱 > 選擇 Token 的時限 > Select scopes 可按需求選擇,目前先什麼都不用選便可以了。

    https://ithelp.ithome.com.tw/upload/images/20230926/20162038teAOaldg2O.png

    確認以後,就可以 Copy Token 了,Token 內容只會出現一次,離開頁面就不能再查看了,需要的話自行存放。

    Step 3: 取得 Token 以後,回到 Jenkins 的頁面,會以 Credentials 來儲存 username 和 token。

    在軟體開發和系統管理中,Credential(憑證) 是用於驗證身份和授予權限的敏感信息的一種通用術語。它可以是用戶名、密碼、金鑰等數據,用於確保只有授權的人員能夠訪問系統、服務或資源。

    在 Credentials 下點選 Add

    https://ithelp.ithome.com.tw/upload/images/20230926/20162038Iuzj5ExAKA.png

    類型為 Username and Password,Username 輸入 GitHub 的 username,Password 則為剛取得的 Token,ID 跟 Description 選填,用作提示這個 Credential 是什麼資訊。

    https://ithelp.ithome.com.tw/upload/images/20230926/20162038E5vpzQca2y.png

  2. Build Step

    串接 Github 以後,Jenkins 便可下載 Repo 的 Source Code 到這個 Job 的 Workspace,然後在這 Workspace 執行以下設定的指令。

    Window 請選用 Execute Windows batch command ,而 Mac 請用 Execute Shell,加入 Command pytest以執行測試。

    https://ithelp.ithome.com.tw/upload/images/20230926/201620382eLBpYG22l.png

    若出現 pytest command not found。通常是因為系統除了默認的環境以外,還有其他 Python 環境。

    • 可使用 Command python3 -m pytest 來指定使用 Python3。
    • 或是設定環境變數指定應用 Python 的路徑 export $PATH:<python location>
  3. 點選 Save 以後,再點 Build Job 則會開始執行,成功的話左邊的 Build History 會亮錄燈。該數字為 Build 的流水號,稱為 Build ID,點擊會顯示該次 Build 的資訊。

    https://ithelp.ithome.com.tw/upload/images/20230926/20162038xsIETMoR1W.png

    查看 Console Output 可以查看 Job 的執行資訊。

    https://ithelp.ithome.com.tw/upload/images/20230926/20162038QYQH0isYAI.png

    以上,就可以建立一個 Jenkins Job 進行 Automation test。

    需要清楚目前身在的位置,遇到問題才比較知道要怎樣處理。
    Job 執行一次後,就會看到 Workspace,可以點進去看,將會是從 Repo 拉下來的 Source Code。
    Jenkins Job 是從 Workspace 作為起始位置。
    https://ithelp.ithome.com.tw/upload/images/20230926/201620381BdSLE9miI.png

Jenkins 使用 Allure Report

知道如何使用 Jenkins 執行 Automation Test 後,我們還需要 Allure Report 套件,讓測試執行可以生成報告。

  1. 先到 Jenkins 的 Plugin 下載並安裝 Allure Report。

    Home > Manage Jenkins > Plugins > Available Plugins > 搜尋 “Allure” > 點選 > Install without restart

  2. 設定 Allure Command Line

    Home > Manage Jenkins > Tools > Add Allure Commandline > 輸入 Name > 點選 Install automatically > Save

    https://ithelp.ithome.com.tw/upload/images/20230926/20162038YcSUlbFOJ4.png

  3. 修改測試的 Job ,在最後的 Post-Build Actions 點選 Allure Report。它會預設在本 Job 的 Workspace 讀取名為 allure-results 的資料夾,利用該測試結果資料生成測試報告。

    https://ithelp.ithome.com.tw/upload/images/20230926/20162038KEASntdiFI.png

  4. 最後執行 pytest 要加上參數 --alluredir=allure-results 使生成的測試結果存放到 allure-results 資料夾。若參數已可加在專案中 pytest.iniaddopts 中則可忽略此步驟。

  5. 重新執行,將會產出 Allure Report 的報告,點擊 Allure Report 連結便可查看內容。

    https://ithelp.ithome.com.tw/upload/images/20230926/20162038p2CcyssklH.png

Jenkins 使用 Discord Notification

自動化測試流程的最後一步就是發送通知,主要看習慣使用的即時通訊軟件 (I.e. Discord, Slack) 或是 Email 等等,根據需求設定。我這裡以 Discord 作為範例。

  1. 先在 Jenkins 安裝 Discord 的套件

    Home > Manage Jenkins > Plugins > Available Plugins > 搜尋 Discord Notifier > 點選 > Install without restart

  2. 到 Discord 生成 Webhook URL,是由 Discord 提供的 URL,讓 Jenkins 可以透過這支 API 發送訊息到 Discord。(基本上其他通訊軟件做法也是相似)

    選取要發送通知的伺服器 > 伺服器設定 > 整合 > 建立 Webhook > 複製 Webhook 的網址

    https://ithelp.ithome.com.tw/upload/images/20230926/20162038kzCZ88pwiV.png

  3. 修改 Job 的內容,在 Post-Build Action 會多了 Discord Notifier 的選項,輸入剛複製的 Webhook URL 便可,Advanced 的內容可根據需求加入。

    https://ithelp.ithome.com.tw/upload/images/20230926/20162038EYyzLK6wv5.png

  4. 重新執行,就會發送通知到 Discord 了

    https://ithelp.ithome.com.tw/upload/images/20230926/20162038r8iOhB5VjQ.png

Scheduling

可以設定 Jenkins Job 什麼時候自動執行,可以是時間的設定,也可以是透過被觸發的方式。

  1. 時間的設定:

一樣進來 Job 的 Configure,在 Build Tiggers 勾選 Build periodically ,然後就可以設定 Schedule,可以點選 ? 參看輸入的規則。

https://ithelp.ithome.com.tw/upload/images/20230926/20162038YIU3u6hsbF.png

這裡要輸入 5 個值 MINUTE HOUR DOM MONTH DOW

MINUTE 代表分鐘,可以是 (0-59),但系統會建議使用 H 以代表在該小時內的任意時間執行一次

HOUR 代表小時,可以是 (0-23) 或是填 * 表示不指定

DOM 代表每月的幾號,可以是 (1-31) 或是填 * 表示不指定

MONTH 代表月份,可以是 (1-12) 或是填 * 表示不指定

DOW 代表每周幾,可以是 (1-12) 或是填 * 表示不指定

I.e. 每天早上 9 點 執行: H 9 * * *

I.e. 平日早上 10 點半 執行: 30 10 * * 1-5

I.e. 星期一, 三, 五早上 10 點 執行: H 10 * * 1,3,5

I.e. 每月 1 號 10 點 執行: H 10 1 * *

可以自行在 Schedule 試用喔,輸入以後,會在輸入格下顯示所設定的時間來確認是否輸入正確。

  1. 另一種常用的方式是透過設定 Token,使用 API 來觸發執行。

勾選 Trigger builds remotely,自行設定 Token。

https://ithelp.ithome.com.tw/upload/images/20230926/20162038wTAy965ctu.png

另外,還需要為 Jenkins User 建一個 API token 才得到權限使用這支 API

在 Manage Jenkins > Users > 點選賦予權限的 User > 設定,在 API Token 點選 Add new Token > 輸入名字 > 點 Generate > 產出 API Token。

API Token 內容需自行保存,因為系統不會顯示第 2 次

https://ithelp.ithome.com.tw/upload/images/20230926/20162038MWudX5Ef6s.png

然後就可以透過提供的 URL 來觸發執行:

http://<jenkins_user>:<api_token>@<jenkins-server>/job/<job>/build?token=<job_token>

# 可透過 curl 指令在 Terminal 執行測試:
curl -X POST http://admin:<token>@localhost:8080/job/Automation%20Test/build?token=AutomationTEST

Job 有被觸發執行就代表成功了。所以可以透過打 API 的方式觸發 Jenkins Job 執行,這樣我們就可以被其他流程結束後自動觸發,例如 Developer 在 Git Service 上 Merge Code 並 Deploy 完成後,就可以打這支 API 來觸發,使自動化測試執行,讓整個流程自動化。

就是這樣,完成各種的設定就把整個 Automation Test 流程的基礎建設都串起來了。

接下來就開始再進行較深入探討測試專案的架構設計吧。


上一篇
Day 24: Allure Report 和 Logging
下一篇
Day 26: PyTest 的 Conftest 與 Fixture
系列文
從 0 開始培育成為自動化測試工程師的學習指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言